/*
 * 公共插件部分
 * @Author: 默然
 * @Date:   2022/10/22 11:58:12
 */

//回填数据
function Form(form) {
    /**
     * @brief 初始化表单项值
     * @param obj Object key:表单项的name; value:表单项的值
     */
    this.init = function (obj) {
        for (var item in obj) {
            this.setValue(item, obj[item]);
        }
    }

    /**
     * @brief 获取表单项全部数据对象
     * @return Object key:表单项的name; value:表单项的值
     */
    this.getItems = function () {
        var obj = new Object();
        var elements;
        if (form == undefined) elements = document.forms[0].elements;
        else elements = document.forms[form].elements;
        var len = elements.length;
        for (var i = 0; i < len; i++) {
            if (obj[elements[i].name] == undefined) obj[elements[i].name] = this.getValue(elements[i].name);
        }
        return obj;
    }

    /**
     * @brief 获取表单项全部数据字符串
     * @return String 查询字符串
     */
    this.formatRequest = function () {
        var elements = this.getItems();
        var tem = '';
        for (i in elements) {
            if (i != '') tem += '&' + i + '=' + elements[i];
        }
        return tem.substr(1);
    }

    /**
     * @brief 设置某一项表单项的值
     * @param String name 表单项name
     * @param String value 表单项的value
     * @return String
     */
    this.setValue = function (name, value) {
        var e;
        if (form == undefined) {
            e = document.forms[0].elements[name];
        }
        else {
            e = document.forms[form].elements[name];
        }
        if (e == undefined) return;
        switch (e.type) {
            case 'text':
            case 'hidden':
            case 'textarea': e.value = value; break;
            case 'radio':
            case 'checkbox':
                {
                    var len = e.length;
                    if (len > 1) {
                        var _value = (';' + value + ';');
                        for (var i = 0; i < len; i++) {
                            if (e[i] != undefined) {
                                if (value == e[i].value || _value.indexOf(';' + e[i].value + ';') != -1) {
                                    e[i].checked = true;
                                }
                                else {
                                    e[i].checked = false;
                                }
                            }
                        }
                    }
                    else {
                        if (e.value == value) {
                            e.checked = true;
                        }
                        else {
                            e.checked = false;
                        }
                    }
                    break;
                }
            case 'select-one': this.setSelected(e, value); break;
            case 'select-multiple':
                {
                    var len = e.length;
                    if (len > 0) {
                        var _value = (';' + value + ';');
                        for (var j = 0; j < len; j++) {
                            if (e[j] != undefined) {
                                if (value == e[j].value || _value.indexOf(";" + e[j].value + ";") != -1 || value.indexOf(";" + e[j].innerHTML + ";") != -1) { e[j].selected = true; }
                            }
                        }
                    }
                    break;
                }
            default:
                {
                    var len = e.length;
                    if (len > 0) {
                        var _value = (';' + value + ';');
                        for (var j = 0; j < len; j++) {
                            if (e[j] != undefined) {
                                if (value == e[j].value || _value.indexOf(";" + e[j].value + ";") != -1) e[j].checked = true;
                            }
                        }
                    }
                    break;
                }
        }
    }

    /**
     * @brief 获取表单某一项的值
     * @param String name 表单项的name
     * @return String 表单项的值
     */
    this.getValue = function (name) {
        var e;
        if (form == undefined) {
            e = document.forms[0].elements[name];
        }
        else {
            e = document.forms[form].elements[name];
        }
        if (e == undefined) return null;
        switch (e.type) {
            case 'text':
            case 'hidden':
            case 'textarea': return e.value; break;
            case 'radio':
            case 'checkbox':
                {
                    if (e.checked) {
                        return e.value;
                    }
                    break;
                }
            case undefined:
                {
                    var len = e.length;
                    var tmp = '';
                    if (len > 0) {
                        for (var j = 0; j < len; j++) {
                            if (e[j] != undefined) {
                                if (e[j].checked) {
                                    if (e[j].value != '') tmp += e[j].value + ';';
                                    else tmp += e[j].innerText + ';';
                                }
                            }
                        }
                    }
                    if (tmp.length > 0) tmp = tmp.substring(0, (tmp.length - 1));
                    if (tmp != '') return tmp;
                    else return null;
                    break;
                }
            case 'select-one': return e.value; break;
            case 'select-multiple':
                {
                    var len = e.length;
                    if (len > 0) {
                        var tmp = '';
                        for (var j = 0; j < len; j++) {

                            if (e[j] != undefined) {
                                if (e[j].checked) {
                                    if (e[j].value != '') tem += e[j].value + ';';
                                    else tem += e[j].innerText + ';';
                                }
                            }
                        }
                    }
                    if (tmp.length > 0) tmp = tmp.substring(0, (tmp.length - 1));
                    if (tmp != '') return tmp;
                    else return null;
                    break;
                }

        }
    }

    /**
     * @brief 设置select下拉框的选中状态
     */
    this.setSelected = function (obj, value) {
        objSelect = obj;
        for (var i = 0; i < objSelect.options.length; i++) {
            if (objSelect.options[i].value == value || objSelect.options[i].text == value) {
                objSelect.options[i].selected = true;
                break;
            }
        }
    }
}
